Professor: Marcio Argollo
Contato: Sala A1-02, tel. 2629-5773
Referências básicas:
Para uma revisão de comandos básicos em Unix/Linux, utilização do gnuplot e programação em C veja o tutorial apresentado na Semana da Física 2009 "Ferramentas de Computação em Física".
As listas deverão ser entregues em papel e por email, compactadas no formato tar.gz e com o nome listaN_seunome.tar.gz
Somas não são comutativas no computador! Calcule as somas

e

com i sendo uma variável ponto flutuante de precisão simples e coloque
em um mesmo gráfico as diferencas

vs N e

vs N para

onde

.
Escrever um programa que recebe como entrada um número inteiro em representação decimal e retorna sua expansão binária. Para tal, crie uma função que verifica se o i-ésimo bit de uma palavra (variável do programa) vale zero ou um.
Considere um número de ponto flutuante de N bits com E bits reservados para o expoente e M=N-E-1 para a mantissa. Represente TODOS os números obtidos nesta representação em um grafico de barras no gnuplot. Para cada número x, armazene um par (x,1) e plote o arquivo de dados com
with impulses
. Reveja
aqui a definição de números de ponto flutuante.

Imagine o empilhamento de dominós de massa unitária e comprimento 2. O primeiro dominó se encontra com o centro de massa na origem, e a cada passo n deslocamos os dominós ja empilhados de

para a direita e adicionamos outro dominó na parte inferior da pilha, também com seu centro de massa na origem. Escreva um programa que diz, para um dado

, quantos dominós podem ser empilhados até que o centro de massa ultrapasse a largura do primeiro dominó e a pilha tombe. (Veja uma discussão do problema
aqui).
A partir deste exercício todos os cálculos envolvendo reais devem ser feito em ponto flutuante com precisão dupla
Sendo a derivada de uma função
definida por
e
, o método de Euler (com difereças posteriores) corresponde ao truncamento desta expansão em ordem h. Obtemos assim que a derivada no ponto x é aproximada por
.
Mostre que o método de Euler com diferenças centradas é exato em

, onde h é o passo de discretização da derivada. Nesse método escrevemos

Calcule a derivada numérica de

no ponto x=3 usando o método de Euler simples com passo de discretização entre

e

e faça um gráfico mostrando a diferença relativa entre a derivada numérica e o valor exato da derivada para ponto flutuante com precisão simples e dupla. Entre quais valores de h a aproximação é aceitável? (Solução
aqui)
Mostre que o método de Euler é instável para qualquer passo h na solução do problema de crescimento exponencial

Integre a equação diferencial

com

com o método de Euler simples para diferentes valores de passo h=0.1, h = 0.05, h = 0.01, h = 0.005 e h = 0.001 e compare cada solução em t=1,2,3,4 e 5 com a solução exata

. Voce pode encontrar essa solução exata digitando a equação diferencial no site do
WolframAlpha
Faça um gráfico com a solução para h=0.05 entre t=0 e t=5 e a solução exata.
Resolva o problema acima com o método de Euler com diferenças centradas e os mesmos valores de h. Para obter o primeiro passo use o método de Euler simples com passo de discretização dez vezes menor que o usado no resto do intervalo.
A aproximação para a derivada, como sugerida no método de Euler, introduz erros sistemáticos que acarretam na destruição de certos invariantes da dinâmica original, como a energia total no movimento do pêndulo simples. Para reduzir os efeitos da aproximação numérica à derivada, pode-se recorrer a métodos com aproximações de ordem superior (o método de Euler é de primeira ordem no passo de discretização h).
Ver: http://mathworld.wolfram.com/Runge-KuttaMethod.html
Atenção
Para sistemas de equações diferenciais, ver: http://www.nsc.liu.se/~boein/f77to90/rk.html
Resolva numericamente o problema do pêndulo físico utilizando o método de Runge-Kutta de quarta ordem com passo

e ilustre o espaço de fase do sistema. Considere

metros, onde é o comprimento da haste de massa desprezível à qual se prende uma massa m. Use a condição inicial

(posição vertical para baixo) e velocidades iniciais

e

, onde

é a velocidade crítica que separa os movimentos de oscilação e rotação (Ver o artigo
"Comportamento crítico no pêndulo simples" do Paulo Murilo para um estudo desta transição). Considere a evolução por dois períodos do movimento. Ilustre, no mesmo gráfico, a solução do problema na aproximação de pequenos ângulos com

e

.
Faça um gráfico contendo os primeiros 30 segundos da evolução temporal dos valores analítico e numérico da energia total do pêndulo. No caso numérico, utilize o método de Euler e o método de Runge-Kutta de segunda e quarta ordem com passos

e

.
Ver Reversible multiple time scale molecular dynamics (pdf aqui)
Estes métodos procuram criar esquemas de discretização da evolução Hamiltoniana de um sistema conservativo, de modo que o volume de pontos representativos no espaço de fase seja preservado durante a evolução temporal. Estes esquemas envolvem fatorização do operador Liouvilleano.
Use o método de Euler-Cromer e o método de Euler com passo

e

para resolver numericamente o problema do pêndulo simples na aproximação de pequenas oscilações. Ulitize a condição inicial

e

. Faça um gráfico contendo a evolução temporal da posição angular por aproximadamente 10 períodos do movimento para a solução analítica e numérica com os métodos de Euler e Euler-Cromer. Faça outro gráfico ilustrando a evolução temporal da energia no mesmo alcance temporal para as 3 soluções.
Nesta sequência de problemas utilize o método de Runge-Kutta de quarta ordem com passo
Considere o pêndulo simples em um meio viscoso, que oferece resistência ao seu movimento com uma força proporcional à sua velocidade
. A equação de movimento pode ser escrita como
.
Faça o gráfico da posição como função do tempo para

e

com posição angular inicial

e

. Note que para valores grandes de q devemos recuperar o movimento sem dissipação (conservativo) e, portanto, devemos utilizar um método simplético, como Verlet ou Euler-Cromer, para integrar a equação de movimento.
Considere agora uma força periódica impulsionando o pêndulo com força
. A equação de movimento pode ser escrita como
.
Construa o gráfico

com

e

e

, respectivamente. Observe a mudança de comportamento ao variarmos a amplitude A da força externa. Simule o pêndulo por 100 ciclos da força externa e despreze os primeiros 10 ciclos (quanto vale o período

da força externa neste exemplo?).
Construa o espaço de fases para cada uma das situações descritas acima com a evolução do ponto representativo
Faça um gráfico “estroboscópico”, chamado seção de Poincaré, imprimindo os pontos no espaço de fase correspondentes a intervalos de tempo múltiplos do período

da força externa

.
Obtenha uma série de pontos

onde

corresponde ao valor da velocidade angular quando

vale zero pela n-ésima vez durante a evolução temporal do pêndulo. Despreze os valores obtidos para tempos menores que 10 ciclos da força externa. Construa agora outra seção de Poincaré em um gráfico

para os mesmos parâmetros do problema anterior.
O pêndulo descrito acima deve apresentar comportamentos distintos para diferentes parâmetros. Em particular, para

e

, obtemos comportamento caótico para alguns valores da amplitude da força externa A. Verifique!
Amplitude da força | Comportamento |
A < 1.085 | periódico |
1.085 < A < 1.11 | caótico |
1.11 < A < 1.14 | periódico |
1.14 < A < 1.22 | caótico |
A ~ 1.22 | periódico |
1.22 < A < 1.28 | caótico |
1.28 < A < 1.475 | periódico |
1.475 < A < 1.485 | caótico |
1.485 < A < 1.493 | periódico |
1.493 < A < 1.495 | caótico |
1.495 < A < 1.497 | periódico |
Leia aqui sobre o problema.
Considere o mapa logístico
Faça os gráficos (escala lin-log) da evolução temporal de x a partir de um valor inicial arbitrário para

e

.
Fazer “gráficos de escada” para os mesmos valores de parâmetro e condição incial x=0.6. Como critério de parada use a condição

.
Fazer “gráficos de escada” para o caso

e condição inicial x=0.3 e para a segunda iterada f(f(x)) com mesma condição inicial.
Construir o diagrama de bifurcação do mapa logístico na região

.
Obter os expoentes de Lyapunov

do mapa logístico na região

.
O mapa logístico com
é ergódico, o que significa que podemos substituir médias temporais por médias sobre configurações de um ensemble e, nesse caso,
onde
é a fração de vezes que a órbita se encontra entre x e x+dx.
Calcule, subdividindo o intervalo [0,1] em 100 subintervalos, o histograma

para as primeiras 100000 iterações do mapa logístico com

e encontre

. Esse caso particular admite a solução analítica

. Compare os resultados mostrando-os em um mesmo gráfico.
Obter o diagrama de bifurcação para os mapas
(a)
(b)
ambos na região
Voce encontra
neste arquivo a sequência dos primeiros 10 mil dígitos de

.
Calcular a frequência P(i) de ocorrência de cada dígito i na sequência.
Calcular a frequência P(i,j) de ocorrência consecutiva de cada par de dígitos (i,j) na primeira metade da sequência. Utilize essa informação para adivinhar, na segunda metade da sequência, qual o dígito j seguinte a um dado dígito i da sequência. Qual a sua frequência de acertos? Como ela se compara com a probabilidade medida na primeira metade?
A função de correlação

é uma das ferramentas tradicionais de análise de sinais. Ela mede o grau de correlação entre o valor do sinal medido em um instante e outro sinal medido em um instante de tempo subsequente. Note que, em sinais não estacionários, a função de correlação pode depender do instante inicial da medida

. Não trataremos desses casos aqui.
Calcule a função de correlação para uma série de 10000 pontos obtidos com a evolução do mapa logístico com

(ponto de acumulação, infinitas órbitas periódicas instáveis emergem neste ponto),

,

(transição caos-ordem em uma janela de período 3) e

(ergodicidade comprovada para esse valor de parâmetro).
Para ler sobre automata celulares:
http://mathworld.wolfram.com/ElementaryCellularAutomaton.html
http://classes.yale.edu/fractals/CA/welcome.html
Desenvolva um código para ilustrar a evolução da regra 90 utilizando somente operações lógicas e um bit para cada sítio do sistema, implementando um sistema de 32 ou 64 bits (dependendo do tamanho da palavra no computador utilizado). Implemente condições de contorno periódicas e livres e condição inicial com um bit central 1 e todos os outros 0.
Desenvolva um código para receber uma dada regra de Wolfram como parâmetro de entrada e retornar a evolução temporal de uma condição inicial por T passos de tempo em um sistema com N sítios. Utilize uma palavra de computador por sítio. Mostre graficamente as evoluções temporais para as regras 30, 60, 90, 102, 126 e 150 com N=T=200. Utilize como condição inicial um único sítio (central) com estado s=1 e todos os outros com s=0 e implemente condições de contorno periódicas (s[N]=s[0]) e livres (s[N]=s[-1]=0);
Para a regra 30, escolha um sítio e acompanhe sua evolução temporal 0,1,0,0,1,….
Calcule o número médio de bits 1 ao longo da evolução com N=10000 e T=100, 1000, 10000 e 100000.
Calcule a função de correlação
Agrupe os bits na evolução em blocos de 8 bits. Transforme o bloco em um inteiro com sinal. Calcule o valor médio do número obtido. Calcule a função de correlação para a série gerada com tal procedimento. Faça um gráfico com a evolução temporal dos números de 8 bits. Para lembrar da representação de inteiros com sinal leia:
http://www.cs.cornell.edu/~tomf/notes/cps104/twoscomp.html
http://en.wikipedia.org/wiki/Two's_complement
Números gerados com o computador, uma máquina de Turing determinística, não pode gerar aleatoriedade com seus elementos lógicos. Podemos, no máximo, gerar sequências de números que passem por determinados testes estatísticos de aleatoriedade. A estes números chamamos pseudo-aleatórios e sua obtenção depende crucialmente do aumento de entropia gerado pela perda de bits (informação) nas operações lógicas - para os mais interessados: http://www.springerlink.com/content/jn7x3365386phn46/
Existem geradores de números verdadeiramente aleatórios, baseados na estocasticidade de processos físicos como emissão de fótons em processos radiativos ou espalhamento em divisores de feixes (veja aqui um exemplo). Esses geradores são usados para operações críticas, como criptografia e bingo.
Uma boa fonte de informações a respeito de números pseudo-aleatórios é a biblioteca GSL, que possui, dentre diversas outras aplicações científicas como cálculo de autovalores e solução de sistemas de equações lineares, rotinas que geram números pseudo-aleatórios com diversas receitas.
http://www.gnu.org/software/gsl/manual/html_node/Random-Number-Generation.html
Usando o gerador congruencial x=(x*A)mod(B) gere pontos em um espaço 2D e visualize seu resultado. Utilize A=16807 e 65539 e B=2147483648. Estes números podem ser gerados sem a operação mod com números inteiros de 32 bits com sinal. Visualize seus resultados normalizando o número aleatório para gerar pontos com alcance [-1…1]
Usando o mesmo gerador com A=16807 e 65539, crie pontos em um espaço 3D. Visualize seus resultados e, girando a figura no gnuplot, tente visualizar a regularidade nos pontos gerados com 65539. Em 2D, visualize x versus 9x-6y+z onde x,y,z são a trinca de números aleatórios correspondente a um ponto no espaço 3D. Veja como o gerador 65539 é ruim para amostrar pontos no espaço.
Gere

pares de pontos (x,y) aleatoriamente distribuídos em 2D (com x e y entre -1 e 1). Calcule a fração de números gerados que satisfazem

. Essa razão deve ser aproximadamente a razao entre a área de um círculo de raio unitário e um quadrado de lado 2. Esta razão vale

. Multiplique sua fração de números por 4 e voce terá calculado pi pelo Método de Monte Carlo. Faça um gráfico mostrando a convergência do valor estimado com o método de Monte Carlo para o valor aproximado de 3.14159265358979323846 (por exemplo, mostre no gráfico a diferença entre o valor aproximado e o valor estimado) utilizando o gerador com A=16807 e compare o resultado obtido com o gerador A=65539. Quantos números aleatórios devemos gerar para se obter

de precisão na sua estimativa com A=16807?
Ruína do jogador: Considere dois jogadores, o primeiro com n1 moedas e o segundo com n2 moedas em um jogo de cara ou coroa. Cada vez que um jogador perde, ele entrega uma moeda para o outro jogador e o jogo se repete até um dos jogadores perder todo o dinheiro. Realize esse jogo um milhão de vezes e calcule a fração de vezes que cada jogador perdeu todo o dinheiro. Esse valor deve ser interpretado como a probabilidade

de cada jogador iir à falência. Compare seu resultado com os valores teóricos para as

e

. Para ler mais sobre o assunto
clique aqui